/*

字母频率统计

输入：一段英文新闻，以换行符结束。该段英文新闻最多包含1024个字符。
输出：该段英文中，a~z每个字母的出现次数，大写的A~Z也计入对应小写字母的频率中。按a～z的顺序依次输出出现次数不为0的字母，每个字母占一行，以 “字母 次数”的格式输出。
*/

// 【算法】
// INPUT: 一段英文新闻字符串str 
// OUTPUT: str中英文字母的出现次数count
// BEGIN
//   将count中所有元素初始化为0;
//   FOR every character c in str DO
//      IF c是一个英文字母 THEN
//          id ← c在字母表中的编号; 
//          //将字母转换为0～25的编号;
//          count [id] ← count[id]+1; //计数累加
//      END
//   END
//   FOR i ← 0 to 25 DO
//      IF count[i] > 0 THEN
//          输出i对应的字母;
//          输出count[i];
//      END 
//   END
// END


#include <stdio.h>

int main(void)
{
    // INPUT: 一段英文新闻字符串str
    char str[1025] = {0};
    scanf("%[^\n]s", str);
    // OUTPUT: str中英文字母的出现次数count
    int count[26] = {0};
    // BEGIN
//   将count中所有元素初始化为0;

//   FOR every character c in str DO
    int i = 0;
    while (str[i] != '\0')
    {
        char c = str[i];
        // IF c是一个英文字母 THEN
        if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))
        {
            int id = 0;
            // id ← c在字母表中的编号; 
            if ((c >= 'A' && c <= 'Z'))
                id = c - 'A';
            else 
                id = c - 'a';
//          count [id] ← count[id]+1; //计数累加
            count[id] = count[id] + 1;

        }
        i++;
    }
    for(i = 0; i <= 25; i++) {
//   FOR i ← 0 to 25 DO
//      IF count[i] > 0 THEN
        if (count[i] > 0) {
            //  输出i对应的字母;
            char c = i + 'a'; // i对应的字母
            printf("%c ", c);
            printf("%d\n", count[i]);
//          输出count[i];
        }
//      END 
//   END
    }
// END
    return 0;
}